package eu.performance.buffer.swap;

import java.io.IOException;
import java.io.Serializable;

/**
 * 交换文件类
 * 
 * @author WZZ
 * 
 * @param <T>
 */
public interface SwapFile<T> {
	/**
	 * 将对象写入到交换文件中
	 * 
	 * @param object
	 *            实现了java.io.Serializable的对象
	 * @return 写入后对象的随机访问地址
	 * @throws IOException
	 */
	public int swapIn(Serializable object) throws IOException;

	/**
	 * 将对象写入到交换文件中
	 * 
	 * @param object
	 *            实现了java.io.Serializable的对象
	 * @return 写入后对象的随机访问地址
	 * @throws IOException
	 * @throws NotSwapableException
	 *             如果参数是一个没有实现java.io.Serializable接口的对象，将会抛出此异常
	 */
	public int swapIn(T object) throws NotSwapableException, IOException;

	/**
	 * 根据地址从交换文件中读取对象
	 * 
	 * @param index
	 *            地址
	 * @return 交换文件中读取出来的对象，如果不存在返回NULL
	 * @throws IOException
	 */
	public T swapOut(int index) throws IOException;

	/**
	 * 检测地址是否指向一个交换后的对象。
	 * 
	 * @param index
	 * @return true or false
	 * @throws IOException
	 */
	public boolean contains(int index) throws IOException;
	
	/**
	 * 关闭文件
	 */
	public void close();
}
